/**
 * 日期时间工具类
 */
class DateUtils {
  /**
   * 格式化时间戳为日期字符串
   * @param {number} timestamp 时间戳（毫秒）
   * @param {string} format 格式化模式，默认为 'YYYY.MM.DD'
   * @returns {string} 格式化后的日期字符串
   */
  static formatDate(timestamp, format = 'YYYY.MM.DD') {
    if (!timestamp) {
      return '';
    }
    
    const date = new Date(timestamp);
    
    // 检查日期是否有效
    if (isNaN(date.getTime())) {
      return '';
    }
    
    const year = date.getFullYear();
    const month = String(date.getMonth() + 1).padStart(2, '0');
    const day = String(date.getDate()).padStart(2, '0');
    const hours = String(date.getHours()).padStart(2, '0');
    const minutes = String(date.getMinutes()).padStart(2, '0');
    const seconds = String(date.getSeconds()).padStart(2, '0');
    
    // 根据格式模式返回相应格式
    switch (format) {
      case 'YYYY.MM.DD':
        return `${year}.${month}.${day}`;
      case 'YYYY-MM-DD':
        return `${year}-${month}-${day}`;
      case 'YYYY/MM/DD':
        return `${year}/${month}/${day}`;
      case 'YYYY.MM.DD HH:mm':
        return `${year}.${month}.${day} ${hours}:${minutes}`;
      case 'YYYY-MM-DD HH:mm:ss':
        return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
      case 'MM.DD':
        return `${month}.${day}`;
      case 'MM-DD':
        return `${month}-${day}`;
      default:
        return `${year}-${month}-${day}`;
    }
  }
  
  /**
   * 格式化活动日期范围
   * @param {number} startTime 开始时间戳
   * @param {number} endTime 结束时间戳
   * @param {string} separator 分隔符，默认为不间断空格
   * @returns {string} 格式化后的日期范围字符串
   */
  static formatDateRange(startTime, endTime, separator = '\u00A0至\u00A0') {
    if (!startTime || !endTime) {
      return '';
    }
    
    const startDate = this.formatDate(startTime);
    const endDate = this.formatDate(endTime);
    
    if (!startDate || !endDate) {
      return '';
    }
    
    return `${startDate}${separator}${endDate}`;
  }
  
  /**
   * 获取当前时间戳
   * @returns {number} 当前时间戳（毫秒）
   */
  static now() {
    return Date.now();
  }
  
  /**
   * 判断时间戳是否为今天
   * @param {number} timestamp 时间戳
   * @returns {boolean} 是否为今天
   */
  static isToday(timestamp) {
    if (!timestamp) return false;
    
    const date = new Date(timestamp);
    const today = new Date();
    
    return date.getFullYear() === today.getFullYear() &&
           date.getMonth() === today.getMonth() &&
           date.getDate() === today.getDate();
  }
  
  /**
   * 计算两个时间戳之间的天数差
   * @param {number} startTime 开始时间戳
   * @param {number} endTime 结束时间戳
   * @returns {number} 天数差
   */
  static daysBetween(startTime, endTime) {
    if (!startTime || !endTime) return 0;
    
    const start = new Date(startTime);
    const end = new Date(endTime);
    
    const diffTime = Math.abs(end - start);
    return Math.ceil(diffTime / (1000 * 60 * 60 * 24));
  }
}

export default DateUtils;